********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
********************************************************************************
*******************************++++++++=-=====++********************************
******************************++===---:.:.....::-=+++***************************
************************++++++=-:......::.........:-=+**************************
********************++*+++++=-. ..:::---=====---::...:=+************************
*******************+++++=--:..:-=====+++++++++++===-:..-+***********************
******************+*++++=...:==++++++++++++++++++++===:.-=++********************
******************+++++=: .-===+++++++++++++++++++++===-.:=+++******************
*******************+++=. :=====++++++++++++++++++++++===-.:=+++*****************
*******************++=. :=======+++++++++++++++++++++====-.-++******************
******************++=: :-======+++++++++++++++++++++++===-::=+******************
*****************+++=..-========+++++++++++++==---:--=====:.-++*****************
*****************+++:.:-===-::::::--=++++++=-::..::::--===-.:++*****************
****************+++=:.:==--:..::::::-=+++++=-====+====--===.:++*****************
***************++++=..:=--:--======---=++++===------=======::+******************
****************+++=:.:=------::::::--==++===-:-:..::-=====:=*******************
****************++++-.:===--:...:-----===+====-----========:+*******************
***************+++++=:.==============-===========+++++=====:-=+*****************
***************++++=-:.========================++++++++====--+******************
*************+++++==-::========++=======++=====+++++++======++******************
*************++++++==---=======+++=----===---==+++++++=======+******************
*********++++++++++++=--======+++==--::----::-==+++++++======+******************
******+++++++++++++++=--======++====---------====++++++===+=+*******************
*****+++++++++++++++++========+====-----===---====++++====++********************
****+++++++++++++++++++=-=======--=--===============+====++*********************
***+*+++++++++++++++++++=========----------------========***********************
*+++++++++++++++++++++++=========--:::::----:::--=======+***********************
*+++++++++++++++++++++++=-==========----------==========+***********************
++++++++++++++++++++++++==-====----====-----==========-+************************
++++++++++++++++++++++++===------------=============--=+************************
+++++++++++++++++++++++====-----=================-----=*************************
+++++++++++++++++++++++======-------=======--==---:-==++++++********************
++++++++++++++++++++++=========-:------------------===++++++++******************
++++++++++++++++++++============----::::::::-:---=====--=+++++++****************
+++++++++++++++++==================-----------===========+++++++++**************
++++++++++++==============--==========================+++++++++++++++***********
+++++++++================---===========================+++++++++++++++**********
++++++=================---=====================+=============++++++++++*********
+++++================--::========+++===++++++++++=======--=======++++++++*******
+++==============---:...-=========+++++++++++++++=======-.:--=======+++++++*****